<%@ page import="com.example.el_jstl.Person" %>
<%@ page import="java.util.*" %><%--
  Created by IntelliJ IDEA.
  User: LiuZiMing
  Date: 2023/3/23
  Time: 8:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    request.setAttribute("key", "value1");
%>
表达式脚本输出key：<%= request.getAttribute("key") == null ? "" : request.getAttribute("key")%> <br/>
EL表达式输出的key：${key}
<%-- 取不到值时 脚本显示null EL显示为"" --%>

<%--四个域的顺序--%>
<%
    pageContext.setAttribute("key2", "value2");
    request.setAttribute("key2", "value2");
    session.setAttribute("key2", "value2");
    application.setAttribute("key2", "value2");
%>
${key2}
<%--
从小到大
pageContext -> request -> session -> application
--%>

<%
    Person person = new Person();
    person.setPhones(new String[]{"131313113", "11111221", "325235234"});
    List<String> cities = new ArrayList<String>();
    cities.add("beijing");
    cities.add("tianjin");
    person.setCities(cities);
    Map<String, Object> map = new HashMap<>();
    map.put("keyy1", "1");
    map.put("keyy2", "2");
    person.setMap(map);
    pageContext.setAttribute("person", person);
%>
输出person：${person}
输出person名称：${person.name}

<%--empty运算--%>
<%
    // 1、值为 null 值的时候，为空
    request.setAttribute("emptyNull", null);
// 2、值为空串的时候，为空
    request.setAttribute("emptyStr", "");
// 3、值是 Object 类型数组，长度为零的时候
    request.setAttribute("emptyArr", new Object[]{});
// 4、list 集合，元素个数为零
    List<String> list = new ArrayList<>();
// list.add("abc");
    request.setAttribute("emptyList", list);
// 5、map 集合，元素个数为零
    Map<String, Object> map2 = new HashMap<String, Object>();
// map.put("key1", "value1");
    request.setAttribute("emptyMap", map2);
%>
${ empty emptyNull } <br/>
${ empty emptyStr } <br/>
${ empty emptyArr } <br/>
${ empty emptyList } <br/>
${ empty emptyMap } <br/>

<%--
EL表达式 11个隐含对象
变量                   类型                       作用
pageContext      PageContextImpl      它可以获取 jsp 中的九大内置对象
pageScope        Map<String,Object>   它可以获取 pageContext 域中的数据
requestScope     Map<String,Object>   它可以获取 Request 域中的数据
sessionScope     Map<String,Object>   它可以获取 Session 域中的数据
applicationScope Map<String,Object>   它可以获取 ServletContext 域中的数据
param            Map<String,String>   它可以获取请求参数的值
paramValues      Map<String,String[]> 它也可以获取请求参数的值，获取多个值的时候使用。
header           Map<String,String>   它可以获取请求头的信息
headerValues     Map<String,String[]> 它可以获取请求头的信息，它可以获取多个值的情况
cookie           Map<String,Cookie>   它可以获取当前请求的 Cookie 信息
--%>
<%--
EL 获取四个特定域中的属性
pageScope ====== pageContext 域
requestScope ====== Request 域
sessionScope ====== Session 域
applicationScope ====== ServletContext 域
--%>

1.协议： ${ req.scheme }<br>
2.服务器 ip：${ pageContext.request.serverName }<br>
3.服务器端口：${ pageContext.request.serverPort }<br>
4.获取工程路径：${ pageContext.request.contextPath }<br>
5.获取请求方法：${ pageContext.request.method }<br>
6.获取客户端 ip 地址：${ pageContext.request.remoteHost }<br>
7.获取会话的 id 编号：${ pageContext.session.id }<br>
</body>
</html>









